package com.nexus.plugin.redis.lock;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * Redis分布式锁注解
 *
 * @Date 2025/9/13 00:41
 * @Author luzhengning
 **/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RedisLock {
    /**
     * 锁名称,支持SpEl表达式
     * 如果锁名称为空，则生成类路径
     * @Date 2025/9/13 01:23
     * @Author luzhengning
     **/
    String value() default "";

    /**
     * 等待锁的时间（秒）
     *
     * @Date 2025/9/13 01:23
     * @Author luzhengning
     **/
    long waitTime() default 1000*5;

    /**
     * 锁的持有时间（秒）
     *
     * @Date 2025/9/13 01:23
     * @Author luzhengning
     **/
    long leaseTime() default -1;

    /**
     * 时间单位配置
     * @Date 2025/9/13 02:33
     * @Author luzhengning
     **/
    TimeUnit timeUnit() default TimeUnit.SECONDS;
}
